package com.example.OnlineStorage.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Web配置类，用于自定义Spring MVC的配置。
 * 实现WebMvcConfigurer接口，以配置拦截器等。
 */
@Component
public class WebConfig implements WebMvcConfigurer {
	
	private final CustomInterceptor customInterceptor;
	
	/**
	 * WebConfig构造函数。
	 *
	 * @param customInterceptor 自定义拦截器实例。
	 */
	public WebConfig (CustomInterceptor customInterceptor) {
		this.customInterceptor = customInterceptor;
	}
	
	/**
	 * 配置拦截器。
	 * 将自定义拦截器添加到Spring MVC的拦截器链中，并指定其拦截的URL模式。
	 * 同时，排除一些不需要拦截的URL路径。
	 *
	 * @param registry 拦截器注册表，用于添加和配置拦截器。
	 */
	@Override
	public void addInterceptors (InterceptorRegistry registry) {
		// 定义不需要被拦截的URL路径
		String[] excludePaths = {
				"/User/login_username",
				"/User/login_email",
				"/User/register",
				"/TempDownload",
				"/TempDownload/Test",
				"/favicon.ico",
				"/v3/api-docs/**",
				"/doc.html",
				"/webjars/**/*.js",
				"/webjars/**/*.css",
		};
		// 添加自定义拦截器，并指定拦截所有URL（/**），然后排除不需要拦截的URL路径
		registry.addInterceptor(customInterceptor)
				.addPathPatterns("/**")
				.excludePathPatterns(excludePaths);
	}
	
}
